<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>state</title>
  </head>
  <body>
    <div id="test">我是一段文本</div>

    <script src="../js/react.development.js"></script>
    <script src="../js/react-dom.development.js"></script>
    <script src="../js/babel.min.js"></script>
    <script src="../js/prop-types.js"></script>

    <script type="text/babel">
      // 创建类式组件
      class Demo extends React.Component {
        state = {
          isHot: true
        }
        troggleHot = () => {
          this.setState({
            isHot: !this.state.isHot
          })
        }
        showData = () => {
          const { input1 } = this
          alert(input1.value)
        }
        tipData = (currentNode) => {
          console.log('currentNode', currentNode)
          this.input1 = currentNode
        }
        render() {
          const { isHot } = this.state
          return (
            <div>
              <p onClick={this.troggleHot}>
                今天天气很{isHot ? '炎热' : '清凉'}
              </p>
              {/*<input
                ref={(currentNode) => {
                  this.input1 = currentNode
                  console.log('showData', currentNode)
                }}
                type="text"
                placeholder="点击按钮提示数据"
              />*/}
              <input
                ref={this.tipData}
                type="text"
                placeholder="点击按钮提示数据"
              />
              <button onClick={this.showData}>点我提示左侧的数据</button>
            </div>
          )
        }
      }

      ReactDOM.render(<Demo />, document.getElementById('test'))

      // 注意：
      // 内联ref回调执行两次解析：
      // 1. 页面要更新时会重新执行 render
      // 2. 执行到内联时会先进行清空操作（会给当前节点赋值为 null）
      // 3. 清空后会再次赋值

      // 2、3的整体步骤加起来就会造成执行两次的问题，可通过实例自身属性的方式解决问题
    </script>
  </body>
</html>
